#include "httplib.h"

void Hello(const httplib::Request& req, httplib::Response& rsp)
{
    rsp.set_content("Hello World!","text/plain");//设置正文内容和正文数据类型
    rsp.status = 200; //响应状态码
}

void Numbers(const httplib::Request& req, httplib::Response& rsp)
{
    auto num = req.matches[1];//0:整体路径，之后的下标保存的是捕捉的数据
    rsp.set_content(num,"text/plain");//设置正文内容和正文数据类型
    rsp.status = 200; //响应状态码
}

//获取客户端上传的文件信息
void Multipart(const httplib::Request& req, httplib::Response& rsp)
{
    auto ret = req.has_file("file");
    if(ret == false)
    {
        std::cout<<"not file upload\n";
        rsp.status = 400;
        return;
    }
    //获取客户端上传的文件信息，从Request& req,客户端发送的请求里获取
    const auto& file = req.get_file_value("file");
    rsp.body.clear();
    rsp.body = file.filename;//文件名称
    rsp.body += "\n";
    rsp.body += file.content;//文件内容

    rsp.set_header("Content-Type","text/plain");
    rsp.status = 200;
    return;
}
int main()
{
    httplib::Server server; //实例化一个Server类对象用于搭建服务器

    server.Get("/hi",Hello); //注册一个针对/hi的Get请求的处理函数映射关系
    server.Get(R"(/numbers/(\d+))",Numbers);//\d匹配一个数字字符，+子表达式大于等于1次(匹配一个数字字符一次或多次)
    server.Post("/multipart",Multipart);

    //启动服务器
    server.listen("0.0.0.0",9090);//0.0.0.0表示匹配使用IP地址
    return 0;
}
